package class6;

import cn.hutool.core.util.ArrayUtil;

/**
 * https://leetcode.cn/problems/plus-one/
 * 加一
 * 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 */
public class Code05_PlusOne {
    public static void main(String[] args) {
        int[] s = new int[]{1, 2, 9, 9, 9, 9};
        s = plusOne(s);
        String s1 = ArrayUtil.toString(s);
        System.out.println("s1 = " + s1);
    }

    public static int[] plusOne(int[] digits) {
        int r = digits.length - 1;
        int c = 1; // 初始化进位加1
        while (c != 0 && r >= 0) {
            int n = digits[r] + c; // 算出最低位的值
            digits[r--] = n % 10; // 给最低位赋值，同时r向左走一位
            c = n / 10; // 判断是否有进位
        }
        // 如果最后依然有进位，则需要创建新数组返回
        if (c == 1) {
            int[] ans = new int[digits.length + 1];
            ans[0] = 1;// 第一位进位制
            for (int i = 1; i < ans.length - 1; i++) {
                ans[i] = digits[i];
            }
            return ans;
        }
        return digits;
    }
}
